import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { resolve } from 'path';
import viteCompression from 'vite-plugin-compression';

const devServerUrl1 = 'http://172.17.31.79';
const devServerUrl2 = 'http://172.17.31.80';
// const devServerUrl1 = 'http://ktjx.aust.edu.cn/';
// const devServerUrl2 = 'http://ktjx.aust.edu.cn/';

// https://vitejs.dev/config/
export default defineConfig({
	// 基础路径
	base: './',

	// 插件配置
	plugins: [
		vue(),
		// gzip 压缩插件（仅生产环境）
		viteCompression({
			verbose: true, // 是否在控制台输出压缩结果
			disable: false, // 是否禁用
			threshold: 10240, // 文件大小超过 10KB 才压缩
			algorithm: 'gzip', // 压缩算法
			ext: '.gz', // 生成的压缩文件扩展名
			deleteOriginFile: false // 是否删除源文件
		})
	],

	// 路径解析别名
	resolve: {
		alias: {
			'@': resolve(__dirname, 'src')
		},
		// 省略的扩展名
		extensions: ['.ts', '.tsx', '.js', '.jsx', '.vue', '.json']
	},

	// CSS 预处理器配置
	css: {
		preprocessorOptions: {
			scss: {
				// 自动导入全局变量文件和 sass:color 模块
				additionalData: `@use "sass:color"; @use "@/assets/css/variable.scss" as *;`
			}
		}
	},

	// 开发服务器配置
	server: {
		port: 3008,
		open: true, // 启动时自动打开浏览器
		cors: true, // 允许跨域
		host: '0.0.0.0', // 设置0.0.0.0可以同时监听localhost和ip，同时防止和webpack端口冲突的问题
		// 核心配置：确保热更新正常工作
		hmr: {
			overlay: true // 错误时显示遮罩层
		},
		// 代理配置
		proxy: {
			'/api/base': {
				target: devServerUrl1,
				changeOrigin: true,
				ws: true // 支持 WebSocket
			},
			'/api/aice': {
				target: devServerUrl2,
				changeOrigin: true,
				ws: true
			},
			'/api/cas': {
				target: devServerUrl2,
				changeOrigin: true,
				ws: true
			},
			'/api/tsms': {
				target: devServerUrl2,
				changeOrigin: true,
				ws: true
			},
			'/api/rms': {
				target: devServerUrl2,
				changeOrigin: true,
				ws: true
			},
			'/api/aidas': {
				target: devServerUrl2,
				changeOrigin: true,
				ws: true
			},
			'/api/aias': {
				target: 'http://172.17.28.174:58787',
				changeOrigin: true,
				ws: true
			},
			'/stream': {
				target: devServerUrl2,
				ws: true,
				changeOrigin: true
			},
			'/ppt': {
				target: devServerUrl2,
				ws: true,
				changeOrigin: true
			}
		}
	},

	// 构建配置
	build: {
		// 输出目录
		outDir: 'dist',
		// 静态资源目录
		assetsDir: 'static',
		// 生产环境不生成 source map
		sourcemap: false,
		// chunk 大小警告的限制（单位 KB）
		chunkSizeWarningLimit: 1500,
		// rollup 打包配置
		rollupOptions: {
			output: {
				// 代码分割策略
				manualChunks: {
					// 将 Vue 相关库单独打包
					vue: ['vue', 'vue-router'],
					// 将 Element Plus 单独打包
					'element-plus': ['element-plus'],
					// 将 D3.js 单独打包
					d3: ['d3']
				},
				// 静态资源命名
				chunkFileNames: 'static/js/[name]-[hash].js',
				entryFileNames: 'static/js/[name]-[hash].js',
				assetFileNames: 'static/[ext]/[name]-[hash].[ext]'
			}
		},
		// 压缩配置
		minify: 'terser',
		terserOptions: {
			compress: {
				// 生产环境移除 console
				drop_console: true,
				drop_debugger: true,
				pure_funcs: ['console.log']
			}
		}
	},

	// 全局常量定义
	define: {
		__VUE_OPTIONS_API__: JSON.stringify(true),
		__VUE_PROD_DEVTOOLS__: JSON.stringify(false),
		__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: JSON.stringify(false)
	},

	// 优化依赖预构建
	optimizeDeps: {
		include: ['vue', 'vue-router', 'element-plus', 'd3']
	}
});
